package com.iflytek.fpva.RedissonLocker;


import org.springframework.cloud.context.config.annotation.RefreshScope;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.Inherited;
import java.lang.annotation.Documented;


/**
 * @Author: mjjiang3
 * @Date: 2020-04-20 15:05
 * @Description: 基于 redisson 实现的分布式锁注解
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@RefreshScope
public @interface DistributedRedissonLock {


    /**
     * 锁的唯一标识 支持SpelExpressionParser 类似于: #user.id,#user.name
     *
     * @return String
     */
    String value();

    /**
     * 指定key前缀，默认前缀是: "应用名:lock:key:"
     *
     * @return String
     */
    String keyPre() default "";


    /**
     * 锁过期秒数
     *
     * @return long
     */
    long expireSeconds() default 5L;

    /**
     * 等待时间
     * 此等待时间为 在此段时间内如果锁被占用那么就一直循环继续获取锁，直到获取到锁为止
     * 如果此时间设置为 <0 时候，则直接启用 看门狗 机制（ 一般不推荐使用 ）
     *
     * @return long
     */
    long waitTime() default 0L;

}
